namespace CSharpPro._0930;

public class Demo
{
    //键盘输入三个整数x、y、z，请把这三个数由小到大输出
    public void TestPrint1()
    {
        Console.WriteLine("请输入三个整数，用空格分隔：\n");
        try
        {
            string[] input = Console.ReadLine()?.Split();
            if (input == null || input.Length != 3)
            {
                Console.WriteLine("输入格式错误，请输入三个整数");
                return;
            }

            int x = int.Parse(input[0]);
            int y = int.Parse(input[1]);
            int z = int.Parse(input[2]);
            int temp;
            if (x > y)
            {
                temp = x;
                x = y;
                y = temp;
            }

            if (x > z)
            {
                temp = x;
                x = z;
                z = temp;
            }

            if (x > y)
            {
                temp = y;
                y = z;
                z = temp;
            }

            Console.WriteLine($"排列结果（由小到大）{x},{y},{z}");
        }
        catch (FormatException)
        {
            Console.WriteLine("输入格式错误，请输入有效的整数");
        }
    }

    //打印出1-100之间所有不是7的倍数和不包含7的数字， 并求和。
    public void TestPrint2()
    {
        Console.WriteLine("1-100之间所有不是7的倍数和不包含7的数字：");
        int sum = 0;
        int count = 0;
        for (int i = 1; i <= 100; i++)
        {
            if (i % 7 == 0 && !i.ToString().Contains("7"))
            {
                Console.Write($"{i} ");
                sum += i;
                count++;

                if (count % 10 == 0)
                    Console.WriteLine();
            }
        }

        Console.WriteLine($"这些数字的和为：{sum}");
    }

    //打印九九乘法表
    public void TestPrint3()
    {
        Console.WriteLine("九九乘法表:");
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                Console.Write($"{j}×{i}={i * j}\t");
            }

            Console.WriteLine();
        }
    }

    //一个数如果恰好等于它的所有真因子（即除了自身 外的所有因数）之和，这个数就称为"完数"。请编程求出1000以内的所有完数。
    public void TestPrint4()
    {
        Console.WriteLine("1000以内的所有完数：");
        for (int num = 2; num < 1000; num++)
        {
            int sum = 1;
            for (int i = 2; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    sum += i;
                }
            }

            if (sum == num)
            {
                Console.Write($"{num}的真因子有：1");

                for (int i = 2; i <= num / 2; i++)
                {
                    if (num % i == 0)
                    {
                        Console.Write($", {i}");
                    }
                }

                Console.WriteLine($", 和为{sum}");
            }
        }
    }

    //键盘录入一个正整数，请求：1.它是几位数？2.逆序打印出各位数字。
    public void TestPrint5()
    {
        Console.WriteLine("请输入一个正整数:\n");
        try
        {
            int num = int.Parse(Console.ReadLine() ?? "0");

            if (num <= 0)
            {
                Console.WriteLine("请输入正整数！");
                return;
            }

            // 计算位数
            int temp = num;
            int digitCount = 0;
            while (temp > 0)
            {
                temp /= 10;
                digitCount++;
            }

            // 逆序打印各位数字
            temp = num;
            Console.Write("逆序数字为: ");
            while (temp > 0)
            {
                Console.Write(temp % 10);
                temp /= 10;
            }

            Console.WriteLine($"\n该数字是{digitCount}位数");
        }
        catch (FormatException)
        {
            Console.WriteLine("输入格式错误，请输入有效的整数！");
        }
    }

    //打印菱形，根据输入的行数，显示菱形形状
    public void TestPrint6()
    {
        Console.WriteLine("请输入菱形的行数（奇数）:");
        try
        {
            int rows = int.Parse(Console.ReadLine() ?? "0");
            
            if (rows <= 0 || rows % 2 == 0)
            {
                Console.WriteLine("请输入正的奇数！");
                return;
            }
            
            int half = rows / 2;
            
            // 上半部分（包括中间行）
            for (int i = 0; i <= half; i++)
            {
                // 打印空格
                for (int j = 0; j < half - i; j++)
                {
                    Console.Write(" ");
                }
                
                // 打印星号
                for (int k = 0; k < 2 * i + 1; k++)
                {
                    Console.Write("*");
                }
                
                Console.WriteLine();
            }
            
            // 下半部分
            for (int i = half - 1; i >= 0; i--)
            {
                // 打印空格
                for (int j = 0; j < half - i; j++)
                {
                    Console.Write(" ");
                }
                
                // 打印星号
                for (int k = 0; k < 2 * i + 1; k++)
                {
                    Console.Write("*");
                }
                
                Console.WriteLine();
            }
        }
        catch (FormatException)
        {
            Console.WriteLine("请输入菱形的行数（奇数）:");
            try
            {
                int rows = int.Parse(Console.ReadLine() ?? "0");
            
                if (rows <= 0 || rows % 2 == 0)
                {
                    Console.WriteLine("请输入正的奇数！");
                    return;
                }
            
                int half = rows / 2;
            
                // 上半部分（包括中间行）
                for (int i = 0; i <= half; i++)
                {
                    // 打印空格
                    for (int j = 0; j < half - i; j++)
                    {
                        Console.Write(" ");
                    }
                
                    // 打印星号
                    for (int k = 0; k < 2 * i + 1; k++)
                    {
                        Console.Write("*");
                    }
                
                    Console.WriteLine();
                }
            
                // 下半部分
                for (int i = half - 1; i >= 0; i--)
                {
                    // 打印空格
                    for (int j = 0; j < half - i; j++)
                    {
                        Console.Write(" ");
                    }
                
                    // 打印星号
                    for (int k = 0; k < 2 * i + 1; k++)
                    {
                        Console.Write("*");
                    }
                
                    Console.WriteLine();
                }
            }
            catch (FormatException)
            {
                Console.WriteLine("输入格式错误，请输入有效的整数！");
            }
        }
    }
}
